8.1 登录注册接口

登录注册在我们的实际业务中是特别常见的东西,本节我们将从需求分析、需求实现等方面与您一起实现一个登录注册的业务流程。

在这之前,如果您还没有接触过前后端的接口开发,那么我们建议您先去了解一下前后端分离的处理流程、请求流程。

本节代码存放目录为 lesson23

分析及接口设计

我们以最简单的登录注册进行讲解,比如:通过输入用户名、密码进行注册,之后通过用户名及密码进行登录。

在这个需求中,我们使用两个接口实现逻辑,一个是注册接口、一个是登录接口。

接口设计如下:

接口名称 接口路径 参数 返回 请求方式
注册接口 /register username、password success GET
登录接口 /login username、password success GET

我们设计两个接口,一个用于注册,一个用于实现登录。

两个接口均接收usernamepassword,如果处理成功,那么将返回字符串success

请求方式我们都使用了GET,正常来说,像这种提交类的接口,我们应该使用POST会好一些,这里为了方便演示,我们暂时使用GET

业务实现

GO语言中,我们可以很轻松的使用原生的库就可以实现一个简单的接口服务器。

在上面的业务中,我们先使用本地存储实现,使用一个map进行注册信息的存储。如下所示:

var (
    userMap map[string]string
)

func init() {
    userMap = make(map[string]string)
}

如上代码所示,我们定义了一个map存储用户注册信息,其中key为用户名,value为用户密码。

在上面我们使用到了init(),这里讲一下,init()函数也就是初始化函数,在每个包中只能存在一个init(),并且是不需要显式调用的,在我们启动程序时会自动调用。

接下来我们实现注册接口,如下代码所示:

func main() {
    http.HandleFunc("/register", register)
    http.ListenAndServe("127.0.0.1:8088", nil)
}

func register(rsp http.ResponseWriter, req *http.Request) {
    username := req.URL.Query().Get("username")
    password := req.URL.Query().Get("password")

    _, ok := userMap[username]
    if ok {
        io.WriteString(rsp, "已经注册过了")
        return
    }

    userMap[username] = password
    io.WriteString(rsp, "success")
}

在上面的代码中,我们使用http.HandleFunc定义了注册接口,使用http.ListenAndServe启动了我们的接口服务器。

运行代码以后,我们就可以直接在浏览器请求接口:http://127.0.0.1:8088:/register?username=1&password=123456

请求成功后,浏览器显示了:success,这就代表我们已经注册成功了。

我们再次请求一次,浏览器显示了已经注册过了,按照我们的预期执行。

接下来我们需要实现登录接口,如下代码所示:

http.HandleFunc("/login", login)

func login(rsp http.ResponseWriter, req *http.Request) {
    username := req.URL.Query().Get("username")
    password := req.URL.Query().Get("password")

    cachePassword, ok := userMap[username]
    if !ok {
        io.WriteString(rsp, "用户名未注册")
        return
    }

    if cachePassword != password {
        io.WriteString(rsp, "密码错误")
        return
    }
    io.WriteString(rsp, "success")
}

程序运行以后,我们完成了登录、注册两个接口逻辑,这时候我们可以在浏览器输入:

  • 注册:http://127.0.0.1:8088:/register?username=1&password=123456

  • 登录:http://127.0.0.1:8088/login?username=1&password=123456

到此我们就完成了一个简单的登录注册示例,但是在实际的开发过程中,我们的注册信息肯定是需要存储起来的。

我们可以尝试使用MySQL文件等方式进行存储,这一类的文章也比较多,我们可以去尝试一下,将userMap换成对应的存储方式即可。

接口开发是我们一定需要掌握的,包括传统的HTTP服务,以及当下比较流行的微服务等。

关于传统的Web开发,可以看一下 malatd,这是一个轻量级的Web框架,使用简单易上手。

results matching ""

    No results matching ""